/**
 * Vosao CMS. Simple CMS for Google App Engine.
 * 
 * Copyright (C) 2009-2010 Vosao development team.
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * email: vosao.dev@gmail.com
 */

package org.vosao.utils;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class MimeType {

	private static String[] mimeTypes = {
	 	"323","text/h323",
	 	"acx","application/internet-property-stream",
	 	"ai","application/postscript",
	 	"aif","audio/x-aiff",
	 	"aifc","audio/x-aiff",
	 	"aiff","audio/x-aiff",
	 	"asf","video/x-ms-asf",
	 	"asr","video/x-ms-asf",
	 	"asx","video/x-ms-asf",
	 	"au","audio/basic",
	 	"avi","video/x-msvideo",
	 	"axs","application/olescript",
	 	"bas","text/plain",
	 	"bcpio","application/x-bcpio",
	 	"bin","application/octet-stream",
	 	"bmp","image/bmp",
	 	"c","text/plain",
	 	"cat","application/vnd.ms-pkiseccat",
	 	"cdf","application/x-cdf",
	 	"cer","application/x-x509-ca-cert",
	 	"class","application/octet-stream",
	 	"clp","application/x-msclip",
	 	"cmx","image/x-cmx",
	 	"cod","image/cis-cod",
	 	"cpio","application/x-cpio",
	 	"crd","application/x-mscardfile",
	 	"crl","application/pkix-crl",
	 	"crt","application/x-x509-ca-cert",
	 	"csh","application/x-csh",
	 	"css","text/css",
	 	"dcr","application/x-director",
	 	"der","application/x-x509-ca-cert",
	 	"dir","application/x-director",
	 	"dll","application/x-msdownload",
	 	"dms","application/octet-stream",
	 	"doc","application/msword",
	 	"dot","application/msword",
	 	"dvi","application/x-dvi",
	 	"dxr","application/x-director",
	 	"eps","application/postscript",
	 	"etx","text/x-setext",
	 	"evy","application/envoy",
	 	"exe","application/octet-stream",
	 	"fif","application/fractals",
	 	"flr","x-world/x-vrml",
	 	"gif","image/gif",
	 	"gtar","application/x-gtar",
	 	"gz","application/x-gzip",
	 	"h","text/plain",
	 	"hdf","application/x-hdf",
	 	"hlp","application/winhlp",
	 	"hqx","application/mac-binhex40",
	 	"hta","application/hta",
	 	"htc","text/x-component",
	 	"htm","text/html",
	 	"html","text/html",
	 	"htt","text/webviewhtml",
	 	"ico","image/x-icon",
	 	"ief","image/ief",
	 	"iii","application/x-iphone",
	 	"ins","application/x-internet-signup",
	 	"isp","application/x-internet-signup",
	 	"jfif","image/pipeg",
	 	"jpe","image/jpeg",
	 	"jpeg","image/jpeg",
	 	"jpg","image/jpeg",
	 	"js","application/x-javascript",
	 	"latex","application/x-latex",
	 	"lha","application/octet-stream",
	 	"lsf","video/x-la-asf",
	 	"lsx","video/x-la-asf",
	 	"lzh","application/octet-stream",
	 	"m13","application/x-msmediaview",
	 	"m14","application/x-msmediaview",
	 	"m3u","audio/x-mpegurl",
	 	"man","application/x-troff-man",
	 	"mdb","application/x-msaccess",
	 	"me","application/x-troff-me",
	 	"mht","message/rfc822",
	 	"mhtml","message/rfc822",
	 	"mid","audio/mid",
	 	"mny","application/x-msmoney",
	 	"mov","video/quicktime",
	 	"movie","video/x-sgi-movie",
	 	"mp2","video/mpeg",
	 	"mp3","audio/mpeg",
	 	"mpa","video/mpeg",
	 	"mpe","video/mpeg",
	 	"mpeg","video/mpeg",
	 	"mpg","video/mpeg",
	 	"mpp","application/vnd.ms-project",
	 	"mpv2","video/mpeg",
	 	"ms","application/x-troff-ms",
	 	"mvb","application/x-msmediaview",
	 	"nws","message/rfc822",
	 	"oda","application/oda",
	 	"p10","application/pkcs10",
	 	"p12","application/x-pkcs12",
	 	"p7b","application/x-pkcs7-certificates",
	 	"p7c","application/x-pkcs7-mime",
	 	"p7m","application/x-pkcs7-mime",
	 	"p7r","application/x-pkcs7-certreqresp",
	 	"p7s","application/x-pkcs7-signature",
	 	"pbm","image/x-portable-bitmap",
	 	"pdf","application/pdf",
	 	"pfx","application/x-pkcs12",
	 	"pgm","image/x-portable-graymap",
	 	"pko","application/ynd.ms-pkipko",
	 	"pma","application/x-perfmon",
	 	"pmc","application/x-perfmon",
	 	"pml","application/x-perfmon",
	 	"pmr","application/x-perfmon",
	 	"pmw","application/x-perfmon",
	 	"png","image/png",
	 	"pnm","image/x-portable-anymap",
	 	"pot","application/vnd.ms-powerpoint",
	 	"ppm","image/x-portable-pixmap",
	 	"pps","application/vnd.ms-powerpoint",
	 	"ppt","application/vnd.ms-powerpoint",
	 	"prf","application/pics-rules",
	 	"ps","application/postscript",
	 	"pub","application/x-mspublisher",
	 	"qt","video/quicktime",
	 	"ra","audio/x-pn-realaudio",
	 	"ram","audio/x-pn-realaudio",
	 	"ras","image/x-cmu-raster",
	 	"rgb","image/x-rgb",
	 	"rmi","audio/mid",
	 	"roff","application/x-troff",
	 	"rtf","application/rtf",
	 	"rtx","text/richtext",
	 	"scd","application/x-msschedule",
	 	"sct","text/scriptlet",
	 	"setpay","application/set-payment-initiation",
	 	"setreg","application/set-registration-initiation",
	 	"sh","application/x-sh",
	 	"shar","application/x-shar",
	 	"sit","application/x-stuffit",
	 	"snd","audio/basic",
	 	"spc","application/x-pkcs7-certificates",
	 	"spl","application/futuresplash",
	 	"src","application/x-wais-source",
	 	"sst","application/vnd.ms-pkicertstore",
	 	"stl","application/vnd.ms-pkistl",
	 	"stm","text/html",
	 	"svg","image/svg+xml",
	 	"sv4cpio","application/x-sv4cpio",
	 	"sv4crc","application/x-sv4crc",
	 	"swf","application/x-shockwave-flash",
	 	"t","application/x-troff",
	 	"tar","application/x-tar",
	 	"tcl","application/x-tcl",
	 	"tex","application/x-tex",
	 	"texi","application/x-texinfo",
	 	"texinfo","application/x-texinfo",
	 	"tgz","application/x-compressed",
	 	"tif","image/tiff",
	 	"tiff","image/tiff",
	 	"tr","application/x-troff",
	 	"trm","application/x-msterminal",
	 	"tsv","text/tab-separated-values",
	 	"txt","text/plain",
	 	"uls","text/iuls",
	 	"ustar","application/x-ustar",
	 	"vcf","text/x-vcard",
	 	"vrml","x-world/x-vrml",
	 	"wav","audio/x-wav",
	 	"wcm","application/vnd.ms-works",
	 	"wdb","application/vnd.ms-works",
	 	"wks","application/vnd.ms-works",
	 	"wmf","application/x-msmetafile",
	 	"wps","application/vnd.ms-works",
	 	"wri","application/x-mswrite",
	 	"wrl","x-world/x-vrml",
	 	"wrz","x-world/x-vrml",
	 	"xaf","x-world/x-vrml",
	 	"xbm","image/x-xbitmap",
	 	"xla","application/vnd.ms-excel",
	 	"xlc","application/vnd.ms-excel",
	 	"xlm","application/vnd.ms-excel",
	 	"xls","application/vnd.ms-excel",
	 	"xlt","application/vnd.ms-excel",
	 	"xlw","application/vnd.ms-excel",
	 	"xml","text/xml",
	 	"xof","x-world/x-vrml",
	 	"xpm","image/x-xpixmap",
	 	"xwd","image/x-xwindowdump",
	 	"z",  "application/x-compress",
	 	"zip","application/zip"		
	};
	
	private static Map<String, String> mimeMap;
	
	static {
		mimeMap = new HashMap<String, String>();
		Iterator<String> i = Arrays.asList(mimeTypes).iterator(); 
		while (i.hasNext()) {
			String key = i.next();
			String code = i.next();
			mimeMap.put(key, code);
		}
	}

	public static String DEFAULT = "application/octet-stream";
	
	public static String getContentTypeByExt(final String ext) {
		String key = ext.toLowerCase();
		if (mimeMap.containsKey(key)) {
			return mimeMap.get(key);
		}
		return DEFAULT;
	}
	
}
